home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Online / opennap / motd.c < prev    next >
C/C++ Source or Header  |  2001-06-08  |  2KB  |  99 lines

  1. /* Copyright (C) 2000-1 drscholl@users.sourceforge.net
  2.    This is free software distributed under the terms of the
  3.    GNU Public License.  See the file COPYING for details.
  4.  
  5.    $Id: motd.c,v 1.17 2001/02/15 08:39:45 drscholl Exp $ */
  6.  
  7. /* Modified 30/05/01 : Added include "confdefs.h" since we are not using the
  8.       for Amiga port : CONFIGURE script
  9. */
  10.  
  11. #include "confdefs.h"
  12.  
  13. #ifndef WIN32
  14. #include <unistd.h>
  15. #endif
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include <errno.h>
  19. #include <limits.h>
  20. #include <stdlib.h>
  21. #include "opennap.h"
  22. #include "debug.h"
  23.  
  24. /* in-memory copy of the motd */
  25. static char *Motd = 0;
  26. static int MotdLen = 0;
  27.  
  28. /* 621
  29.    display the server motd */
  30. HANDLER (show_motd)
  31. {
  32.     (void) tag;
  33.     (void) len;
  34.     (void) pkt;
  35.  
  36.     ASSERT (validate_connection (con));
  37.     CHECK_USER_CLASS ("show_motd");
  38.  
  39.     /* we print the version info here so that clients can enable features
  40.        only present in this server, but without disturbing the windows
  41.        client */
  42.     send_cmd (con, MSG_SERVER_MOTD, "VERSION %s %s", PACKAGE, VERSION);
  43.  
  44.     send_cmd (con, MSG_SERVER_MOTD, "SERVER %s", Server_Name);
  45.  
  46.     /* useless information wanted by panasync.  :-) */
  47.     send_cmd (con, MSG_SERVER_MOTD,
  48.               "There have been %d connections to this server.",
  49.               Connection_Count);
  50.  
  51.     /* motd_init() preformats the entire motd */
  52.     queue_data (con, Motd, MotdLen);
  53. }
  54.  
  55. void
  56. motd_init (void)
  57. {
  58.     char path[_POSIX_PATH_MAX];
  59.     FILE *fp;
  60.     int len;
  61.  
  62.     snprintf (path, sizeof (path), "%s/motd", Config_Dir);
  63.     fp = fopen (path, "r");
  64.     if (!fp)
  65.     {
  66.         if (errno != ENOENT)
  67.             logerr ("motd_init", path);
  68.         return;
  69.     }
  70.     /* preformat the motd so it can be bulk dumped to the client */
  71.     while (fgets (Buf, sizeof (Buf) - 1, fp))
  72.     {
  73.         len = strlen (Buf);
  74.         if (Buf[len - 1] == '\n')
  75.             len--;
  76.         if (safe_realloc ((void **) &Motd, MotdLen + len + 4))
  77.             break;
  78.         set_tag (&Motd[MotdLen], MSG_SERVER_MOTD);
  79.         set_len (&Motd[MotdLen], len);
  80.         MotdLen += 4;
  81.         memcpy (Motd + MotdLen, Buf, len);
  82.         MotdLen += len;
  83.     }
  84.     fclose (fp);
  85.     log ("motd_init: motd is %d bytes", MotdLen);
  86. }
  87.  
  88. void
  89. motd_close (void)
  90. {
  91.     if (Motd)
  92.     {
  93.         FREE (Motd);
  94.         Motd = 0;
  95.         MotdLen = 0;
  96.     }
  97.     ASSERT (MotdLen == 0);
  98. }
  99.